MPEG is associated with a family of standards used for coding audio-visual information (e.g., movies, video, and music) in a digital compressed format. The major advantage of MPEG compared to other video and audio coding formats is that MPEG files, because of the use of data compression, are much smaller for the same quality. This is because MPEG uses very sophisticated compression techniques that may be loss-less. By assigning smaller codes for more frequently used characters and larger codes for less frequently used characters, a file can be compressed considerably.
AAC is known as a useful state-of-the-art audio compression tool that provides a superior performance. An AAC audio format is known to be used in High Definition Transport Streams in Asia, in QuickTime (iTunes) and in MPEG 4 ISO formats. Currently, at least one commonly known implementation of an AAC decoder is by the Core Codec group.
AAC files can occur internal to Audio/Video formats such as AVI/OGM/Matroska, or as a stand alone Audio file (AAC/M4A). An AAC encoded stream contains spectral values that are quantized using the two parameters, i.e., quantized spectral lines, and scale factor. The scale factor defines the full scale range of the quantization, and the quantized line defines the precision within that scale. The entire frequency region is divided into frequency groups called “scale-factor bands”. Each scale-factor band is associated with one scale factor, reflecting the psycho acoustic similarity of the grouped frequencies. The scale-factors are obtained through an iterative procedure in a bit allocation module, and reflect the magnitudes of the spectral coefficients in each scale-factor band. The bit allocation algorithm typically divides the available data bits among various scale-factor bands. Units with a large number of bits may have little quantization noise, and units with few or no bits may have significant amounts of noise. For good sound quality, it is preferred that a bit allocation algorithm should ensure that critical units have sufficient bits, and that the noise in non-critical units is not perceptually significant.
AAC takes advantage of such new tools as temporal noise shaping, backward adaptive linear prediction and enhanced joint stereo coding techniques. For example, AAC supports a wide range of sampling rates (8-96 kHz), bit rates (16-576 kbps) and from one to 48 audio channels. AAC in one form has the ability to use the coding tools already present in MP3, but implements them in a better way using a filter bank which may be a pure MDCT (modified discrete cosine transform) and not a hybrid filter bank, as for example in MP3. AAC in another form also introduces some new tools over previous coding schemes. One such tool is Temporal Noise Shaping (TNS) which is a tool designed to control the location, in time, of the quantization noise by transmission of filtering coefficients. Prediction may be used as a tool designed to enhance compressibility of stationary signals.
It is known that a Huffman binary tree is generated when the coding process is done. For decoding however, the process starts at the root of the Huffman binary tree. When a bit is reached, and depending on whether it is 0 or 1, the decoding process goes to the left or the right respectively. The decoding process may stop when a leaf node is encountered, which contains the symbol to decode.
A Huffman decoder, as known, is a variable length statistical coder. As a result, the encoder does not send the length of each codeword, but rather sends the Huffman tree to which a set of codewords belong to. This makes it very difficult for the decoder, as it has to step through each of the nodes of the Huffman tree, searching for the leaf node. Each node can in turn have multiple leaf nodes, which makes it even more MIPS intensive for the decoder to corner down to a single leaf node. Since the Huffman code length is not fixed, typically the decoder has to find out the length of each code while processing. In the known Huffman decoding approach, a codebook in the form of code tables including information about the nodes and codewords is generally used for search by traversing. Traversing each of the nodes of the Huffman tree or the codebook for decoding a given codeword is expensive and time consuming. In known decoding methods, there is still the need for too many iterations and traversing operations for decoding a codeword while using code tables.